<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>原型链</title>
</head>
<body>
  <pre>
    <!-- 
      __proto__属性都是由一个对象指向一个对象，即指向它们的原型对象（也可以理解为父对象），
      那么这个属性的作用是什么呢？当访问一个对象的属性时，如果该对象内部不存在这个属性，
      那么就会去它的__proto__属性所指向的那个对象（可以理解为父对象）里找
      如果父对象也不存在这个属性，则继续往父对象的__proto__属性所指向的那个对象（可以理解为爷爷对象）里找，

    如果还没找到，则继续往上找…直到原型链顶端 null（可以理解为原始人。。。），
    此时若还没找到，则返回undefined（可以理解为，再往上就已经不是“人”的范畴了，找不到了，到此结束），
    由以上这种通过__proto__属性来连接对象直到null的一条链即为我们所谓的原型链。 -->


    ★★★★★
    什么是原型链：

    所谓的原型链就是指，每个对象都有 __proto__ 属性，
    这个属性指向实例的原型对象，

    原型对象也是一个对象，那么它本身也有__proto__ 属性
    原型对象它的原型对象是 Object.prototype

    Object.prototype 本身又是一个对象，又有 __proto__ 属性
    这时候， Object.prototype的原型返回的是 null
    
  </pre>

  <script>
     function Person(name, age) { }

      Person.prototype.sayHi = function () {
        console.log('Hi~你好')
      }

      var man = new Person()
      man.sayHi()

      console.log(man.__proto__)
      console.log(Person.prototype.__proto__ === Object.prototype)
      console.log(Object.prototype.__proto__)
  </script>
</body>
</html>